home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok44.lha / Analyse3.01 / analyse.dok < prev    next >
Text File  |  1993-08-15  |  16KB  |  326 lines

  1.  
  2.  
  3.  ____________________________________________________________________
  4. |                                                                    |
  5. | ***       ****    *    *  *     *  *     *  ******  *    * ******* |
  6. | *  **    *    *   *   *   *     *  **   **  *       **   *    *    |
  7. | *    *  *      *  *  *    *     *  * * * *  *       * *  *    *    |
  8. | *    *  *      *  ***     *     *  *  *  *  ****    * *  *    *    |
  9. | *    *  *      *  *  *    *     *  *     *  *       *  * *    *    |
  10. | *  **    *    *   *   *   *     *  *     *  *       *   **    *    |
  11. | ***       ****    *    *   *****   *     *  ******  *    *    *    |
  12. |____________________________________________________________________|
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.                  zum Modul 'analyse' (C) by Lothar Schwab
  23.                  ========================================
  24.  
  25.          ( Genauer: Die Beschreibung der aktuellen Version V3.01 )
  26.                            Inahltsverzeichniss:
  27.                            --------------------
  28.  
  29. Kapitel                 Inhalt
  30.  
  31. 1.......................Vorwort zu dieser Dokumentation
  32. 2.......................Was ist Analyse?
  33. 3.......................Umfang des Analysepaketes
  34. 4.......................Bedienung von Analyse
  35. 4.1.....................Das Funktionsangebot von Analyse
  36. 4.2.....................Das Datenangebot von Analyse
  37. 5.......................schematische Darstellung von Analyse
  38.                     1. Vorwort zu dieser Dokumentation
  39.                     ----------------------------------
  40.  
  41. Diese Dokumentation versteht sich nicht als Beschreibung von Analyse, son-
  42. dern  vielmehr  als  eine  Beschreibung der Anwendung von Analyse.  Zu den
  43. früheren  Versionen  von  Analyse  gibt  es ebenfalls Dokumentationsfiles.
  44. Teilweise wurden diese jedoch nicht mit jeder Version neu erstellt sondern
  45. es wurden zu den alten Dokumentationsfiles die neuen Informationen dazuge-
  46. schrieben.  Die dadurch entstandene Unklarheit und Verwirrung soll nun mit
  47. Version  V3.01  beseitigt werden.  Diese Dokumentation wurde neu erstellt.
  48. Nur  Kleinigkeiten wurden von der alten Dokumentation übernommen.  Dem An-
  49. wender wird empfohlen, alle Dateien zu löschen, die zu alten Versionen von
  50. Analyse gehören.
  51.                             2. Was ist Analyse?
  52.                             -------------------
  53.  
  54. Analyse  ist  ein  Softwarepaket,  daß  den Umgang mit arithmetischen Aus-
  55. drücken  unterstützt.  Ein Anwendungsprogramm kann Analyse einen als Text-
  56. string  vorliegenden arithmetischen Ausdruck in ausführbaren Maschinencode
  57. übersetzen  lassen.  Über Analyse läßt sich der Maschinencode starten, da-
  58. mit  er den Wert des arithmetischen Ausdruckes berechnet und das Ergebniss
  59. dem  Anwendungsprogramm  zur  Verfügung stellt.  Analyse gestattet es, den
  60. arithmetischen  Ausdruck  von  Variablen abhängig zu machen.  Wird der Ma-
  61. schinencode  mehrmals  mit  verschiedenen  Variablenbelegungen aufgerufen,
  62. dann  kann man z.B.  Funktionswerte berechnen und graphisch darstellen.  (
  63. Man  muß  dazu  nur  den  arithmetischen  Ausdruck als Funktionsvorschrift
  64. interpretieren.   )  Darüberhinaus  bietet  Analyse  die  Möglichkeit, mit
  65. mehreren  arithmetischen  Ausdrücken auf einmal zu arbeiten.  Außerdem ist
  66. es möglich, einen arithmetischen Ausdruck ( als Funktion aufgefasst ) nach
  67. einer  Variablen  symbolisch  abzuleiten.   Damit  lassen sich schon recht
  68. leistungsfähige  Programme  entwerfen, die auch zur Laufzeit anwenderdefi-
  69. nierte  Funktionen verarbeiten können.  Durch geeignete Interpretation der
  70. Variablen  lassen  sich  sogar  Differentialgleichungen ( numerisch ) ver-
  71. arbeiten.   Analyse  ist  entwickelt worden für den Commodore Amiga in der
  72. Programmiersprache Modula-2.
  73.                        3. Umfang des Analysepaketes
  74.                        ----------------------------
  75.  
  76. Zum kompletten Analysepaket gehören folgende Dateien:
  77. -analyse.dok
  78.   analyse.dok ist nichts weiter, als diese Dokumentationsdatei
  79.  
  80. -syntax
  81.   Die  Datei  Syntax ist eine graphische Beschreibung der Syntax, die Ana-
  82.   lyse  für  arithmetische  Ausdrücke  zuläßt.  Die Syntax ist in Form von
  83.   Backus  Naur  Diagrammen  dargestellt.   Diese  Darstellung ist sehr an-
  84.   schaulich  und  soll  dem  Anwender dazu dienen, sich bei offenen Fragen
  85.   über die Syntax Klarheit zu verschaffen.
  86.  
  87. -analyse.def
  88.   Analyse  ist  ein  Modul,  daß  jedes andere Modula-2 Programm verwenden
  89.   kann.   Dazu  muß  es  nur das Definitionsmodul 'analyse.def' mit seinen
  90.   Daten (-typen) und Funktionen importieren.
  91.  
  92. -analyse.mod
  93.   In der Datei 'analyse.mod' befindet sich der Modula-2 Teil der Implemen-
  94.   tation von Analyse.  Hier wird ein arithmetischer Ausdruck in eine Baum-
  95.   struktur  umgewandelt und hier befindet sich auch die Schnittstelle zwi-
  96.   schen einem Anwendungsprogramm und dem Assemblerteil von Analyse.
  97.  
  98. -server.s
  99.   Diese  Datei enthält den Quellcode des Assemblerteiles von Analyse.  Der
  100.   Assemblerteil  enthält  im wesentlichen einen Compiler, der einen arith-
  101.   metischen  Ausdruck  in Maschinencode übersetzt.  Darüberhinaus befinden
  102.   sich noch diverse andere Funktionen im Assemblerteil, die jedoch für die
  103.   Anwendung von Analyse nicht so wichtig sind.
  104.  
  105. -server
  106.   'server' ist der fertig assemblierte und ablaufbereite Assemblerteil von
  107.   Analyse.   Der  Modula-2 Teil von Analyse versucht nach Start des Anwen-
  108.   dungsprogramm  den  Assemblerteil  nachzuladen.   Der Anwender muß dafür
  109.   Sorge tragen, daß sich das Programm 'server' im Systemverzeichniss devs:
  110.   befindet.   Achtung:   'server'  ist  ein  ablaufbereites  Programm.  Es
  111.   erwartet  jedoch eine besondere Aufrufumgebung, die ihm nur der Modula-2
  112.   Teil  von  Analyse  bietet.   Es  ist  sinnlos  (und möglicherweise auch
  113.   absturtzgefährdet), 'server' von Hand mit dem CLI oder von der Workbench
  114.   aus zu starten!
  115.                          4. Bedienung von Analyse
  116.                          ------------------------
  117.  
  118.                    4.1 Das Funktionsangebot von Analyse
  119.                    ------------------------------------
  120.  
  121. Wie  man  aus dem Definitionsmodul entnehmen kann, bietet Analyse folgende
  122. Funktionen an:
  123.  
  124. -codeanf
  125.   Bekanntlich  wird ein arithmetischer Ausdruck von Analyse in ein Maschi-
  126.   nenprogramm  übersetzt.  Das Anwendungsprogramm muß dazu jedoch erst ei-
  127.   nen  geeigneten  Speicherbereich zur Verfügung stellen.  Dazu importiert
  128.   es  aus  dem Definitionsmodul von Analyse den Datentyp codezeiger.  Beim
  129.   Aufruf  der  Funktion codeanf wird eine Variable dieses Types übergeben.
  130.   Dadurch  wird  ein  genügend  großer Speicherbereich vom System angefor-
  131.   dert.   Dieser Speicher kann beliebig oft verwendet werden, um dort kom-
  132.   pilierte Ausdrücke abzulegen.  Es empfiehlt sich folgendes Vorgehen:  Zu
  133.   Programmbeginn  wird  für  jede  Codezeigervariable  der nötige Speicher
  134.   angefordert.  Am Programmende wird der Speicher für jede solche Variable
  135.   wieder freigegeben.  Achtung:  Wird der Speicher nicht angefordert, dann
  136.   endet  das  Anwendungsprogramm  garantiert  durch  einen Systemabsturtz.
  137.   Wird  der  Speicher am Programmende nicht freigegeben, dann wird er auch
  138.   durch  das  Laufzeitsystem  von  M2Amiga  nicht mehr freigegeben, da der
  139.   Speicher  direkt  über den Exec Kernal angefordert wird.  Nach dem Funk-
  140.   tionsaufruf  steht  die  Variable  ok im Definitionsmodul auf TRUE, wenn
  141.   alles  geklappt  hat.  War nicht genügend Speicher vorhanden, dann steht
  142.   ok  auf  FALSE.  Übrigens setzen alle Funktionen die Variable ok im Feh-
  143.   lerfalle auf FALSE.
  144.  
  145. -codeloe
  146.   Diese  Funktion ist das Gegenstück zu Codeanf und ist unter diesem Punkt
  147.   auch  beschrieben.   Die Anwendung von codeloe auf einen überhaupt nicht
  148.   angeforderten Speicherbereich resultiert in einem Systemabsturtz.
  149.  
  150. -parser
  151.   Jeder  arithmetische  Ausdruck,  der  in Textform vorliegt muß durch den
  152.   Aufruf  von  parser  erst  in eine andere Form gebracht werden, damit er
  153.   weiterverarbeitet  werden  kann  ( Baumstruktur ).  Für die Baumstruktur
  154.   benötigt  man wieder einen speziellen Zeiger, dessen Typ man aus dem De-
  155.   finitionsmodul importieren kann.  (knotenzeiger).  Mit ok = FALSE signa-
  156.   lisiert die Prozedur, daß ein Fehler aufgetreten ist.  Der genaue Fehler
  157.   kann der Variablen fehler entnommen werden.  Wenn der Aufruf erfolgreich
  158.   verlaufen  ist,  dann  kann das Anwendungsprogramm feststellen, von wel-
  159.   chen Variablen der Ausdruck abhängt.  Die Abhängigkeit von der Variablen
  160.   x , y und z kann leicht über die logischen Variablen xabh, yabh und zabh
  161.   aus  dem  Definitionsmodul  abgefragt  werden.   Für die indizierten Va-
  162.   riablen  gibt  es  ein Feld aus logischen Variablen (abhfeld).  Außerdem
  163.   gibt  es die Variable maxvar, die einen Variablenindex angibt.  Sie gibt
  164.   den höchsten Index an, von dem der Ausdruck noch abhängt.  Beim Ausdruck
  165.   x7  -  x3  *  sin (x2) wird maxvar also auf 7 gesetzt werden.  Hängt der
  166.   Ausdruck  von  keiner indizierten Variablen ab, so ist maxvar gleich -1.
  167.   Tritt  ein  Fehler auf, dann sollte man den entstandenen Baum sofort mit
  168.   'loesche' löschen.
  169.  
  170. -ableitung
  171.   Eine  fertige  Baumstruktur kann nach einer Variablen abgeleitet werden.
  172.   Man erhält dadurch neben der ursprünglichen Baumstruktur noch eine zwei-
  173.   te,  die die Ableitung der ersten Struktur enthält.  Analyse unterstützt
  174.   zwei  Arten  von  Variablen:  zum einen die drei Variablen x , y , z die
  175.   man   bevorzugt   verwenden  sollte,  weil  der  erzeugte  Maschinencode
  176.   schneller  auf  sie  zugreifen  kann.   Andererseits bietet Analyse auch
  177.   indizierte  Variablen an:  x0 , x1 , ...  , x49 , x50.  Beachten Sie, da
  178.   x  sich von allen indizierten Variablen unterscheidet.  Beim Ableiten mu
  179.   ein  Parameter  übergeben werden, der beschreibt, nach welcher Variablen
  180.   abgeleitet  werden  soll.  Dieser Parameter hat den Typ CHAR und ist wie
  181.   folgt zu wählen:  ableiten nach x:  253C ableiten nach y:  254C ableiten
  182.   nach  z:  255C ableiten nach x0:  0C ableiten nach x1:  1C ...  ableiten
  183.   nach  x50:   50C  Durch  ok = FALSE wird wieder ein Fehler signalisiert.
  184.   Der entstandene Baum sollte  aber  nicht mehr benutzt, sondern  vielmehr
  185.   gelöscht werden.
  186.  
  187. -infix
  188.   Durch  den  Aufruf  der Prozedur infix kann man eine Baumstruktur in ein
  189.   lesbares  Textformat  umwandeln.  Damit kann man z.B.  eine erzeugte Ab-
  190.   leitung  wieder  in normaler Schreibweise ausgeben.  Mit ok = FALSE wird
  191.   signalisiert,  daß  der  Ausdruck  in  Textform nicht in den übergebenen
  192.   String  passt.   In diesem Falle fehlt das letzte Stück der Textdarstel-
  193.   lung.
  194.  
  195. -codegen
  196.   Die  Funktion  codegen  benötigt  einen Zeiger auf den zu kompilierenden
  197.   Baum  und  einen  Zeiger  auf einen Codespeicherbereich.  Der übergebene
  198.   Baum wird in Maschinencode übersetzt.  Dieser Maschinencode wird dann in
  199.   der  übergebenen  Codestruktur  abgelegt.  Wenn ok = FALSE ist, dann ist
  200.   der  Ausdruck  so komplex, daß er nicht in den Codespeicherbereich paßt.
  201.   Achtung:   es  wurde  dann ein nicht vollständiges Maschinenprogramm er-
  202.   zeugt.   Wenn  es  trotzdem  aufgerufen wird, so kann der Rechner unter-
  203.   schiedlich gründlich abstürtzen!
  204.  
  205. -loesche
  206.   Wenn  ein  Baum  nicht  mehr  benötigt wird (Codestruktur muß nicht mehr
  207.   erzeugt  werden  und  es  muß  auch  nicht mehr abgeleitet werden), dann
  208.   sollte  man  vor  dem nächsten 'parser' Aufruf den Speicher für den Baum
  209.   mit  'loesche'  freigeben,  da dieser sonst für das System verloren ist.
  210.   Er  würde  übrigens auch nicht mehr vom M2Amiga Laufzeitsystem nach Pro-
  211.   grammende  freigegeben werden, da auch hier der Speicher direkt über den
  212.   Exec Kernal angefordert wird.
  213.  
  214. -funktion
  215.   Diese Funktionsprozedur ruft den angegebenen Maschinencode auf und nimmt
  216.   dessen Ergebniss entgegen.  Vorher sollten natürlich alle Variablen, von
  217.   denen  der  Ausdruck abhängt mit sinnvollen Werten belegt werden.  Kommt
  218.   es  zu  einem mathematischen Fehler ( Division durch Null, Überlauf oder
  219.   Verletzung  eines Definitionsbereiches ), so wird die Variable ok wieder
  220.   auf  FALSE  gesetzt.   Der  erhaltene  Funktionswert  ist in diesem Fall
  221.   irgend ein Schrott.
  222.                      4.2 Das Datenangebot von Analyse
  223.                      --------------------------------
  224.  
  225. folgende  Variablen  und  Datentypen  aus dem Definitionsmodul wurden noch
  226. nicht kommentiert:
  227.  
  228. fehlertypen:
  229.   Nach einem gescheiterten Aufruf von 'parser' enthält die Variable fehler
  230.   einen  Wert aus dem Aufzählungtyp  fehlertypen. Diese haben folgende Be-
  231.   deutung:
  232.  
  233. -klammerauferwartet:
  234.   nach  einem Funktionsnamen muß ein in Klammern eingeschlossenes Argument
  235.   kommen.
  236.  
  237. -klammerzuerwartet:
  238.   Der arithmetische Ausdruck endete überraschend, ohne daß alle geöffneten
  239.   Klammerebenen geschlossen wurden.
  240.  
  241. -quatsch:
  242.   Der Parser erwartete an dieser Stelle ein konkretes Symbol.  Stattdessen
  243.   kam jedoch irgend ein Schrott.
  244.  
  245. -woistdastermende:
  246.   Laut Syntax muß kein weiteres Symbol mehr zwingend kommen.  Der Ausdruck
  247.   könnte  an dieser Stelle enden.  Leider kommt jedoch irgend ein Schrott-
  248.   symbol.
  249.  
  250. -falscherindex:
  251.   Der  Index  der  Variable  ist  größer  als  der maximale Index.  (siehe
  252.   Konstante varanzahl im Defintionsmodul)
  253.  
  254. position:
  255.   Diese  Variable  gibt  nach  dem  gescheiterten Aufruf von parser an, an
  256.   welcher Stelle des Strings ein Syntaxfehler festgestellt wurde.
  257.                  5. schematische Darstellung von Analyse:
  258.                  ----------------------------------------
  259.  
  260.   Zum  Schluß  noch einmal eine schematische Darstellung der Beziehungen
  261.         zwischen Analyse und einem Programm, das Analyse verwendet:
  262.  
  263.      Das  Anwenderprogramm     Verwendet       Analyse bedankt
  264.      stellt zur Verfügung:       wird:         sich dafür mit:
  265.  
  266.                                _________
  267.                               |         |
  268.                   String ---> |         | ---> Baumstruktur
  269.                               |  parser |
  270.               Baumzeiger ---> |         | ---> Abhängigkeitsinformation
  271.                               |_________|
  272.                                         \----> Fehler
  273.  
  274.                                _________
  275. Baumzeiger ( Funktion  ) ---> |         |
  276.                               |         |
  277. Baumzeiger ( Ableitung ) ---> |ableitung| ---> Baumstruktur
  278.                               |         |
  279.      Variable ( CHAR   ) ---> |_________|
  280.                                         \----> ( Fehler )
  281.  
  282.                                _________
  283.                               |         |
  284.               Codezeiger ---> |         |
  285.                               | codegen | ---> Codestruktur
  286.               Baumzeiger ---> |         |
  287.                               |_________|
  288.                                         \----> Fehler
  289.  
  290.                                _________
  291.                               |         |
  292.                               |         |
  293.               Baumzeiger ---> | loesche |
  294.                               |         |
  295.                               |_________|
  296.  
  297.                                _________
  298.                               |         |
  299.                               |         |
  300.               Codezeiger ---> | codeanf | ---> Codespeicher
  301.                               |         |
  302.                               |_________|
  303.  
  304.                                _________
  305.                               |         |
  306.               Codezeiger ---> |         |
  307.                               |funktion | ---> Funktionswert
  308.      Variablen x , y , z ---> |         |
  309.      + indizierte Variablen   |_________|
  310.                                         \----> Fehler
  311.  
  312.                                _________
  313.                               |         |
  314.                               |         |
  315.               Codezeiger ---> | codeloe |
  316.                               |         |
  317.                               |_________|
  318.  
  319.                                _________
  320.                               |         |
  321.               Baumzeiger ---> |         |
  322.                               |  infix  | ---> String mit Funktion
  323.                   String ---> |         |
  324.                               |_________|
  325.                                         \----> Fehler
  326.